iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
自我挑戰組

30天自我學習arduino系列 第 6

第六天 蜂鳴器的基本介紹

  • 分享至 

  • xImage
  •  

蜂鳴器可以分為兩種,一種是無源蜂鳴器(圖左),另一種是有源蜂鳴器(圖右),通常無源蜂鳴器底部可以直接看到電路板。

無源蜂鳴器可以透過程式修改頻率來發出不同音高,而有源蜂鳴器有內建一個固定的頻率,所以只能發出固定的音高。

無源蜂鳴器

在發出聲音的時候會使用tone(輸出腳位,頻率,持續時間(毫秒))函數

#define C 523   //定義音高頻率
#define D 587
#define E 659
#define F 698
#define G 784
#define A 880
const byte Speak=11;
const int DELAY=300;
//宣告一個常數int陣列用來存每個音的音高
const int P[]={C,C,G,G,A,A,G,F,F,E,E,D,D,C,G,G,F,F,E,E,D,G,G,F,F,E,E,D,C,C,G,G,A,A,G,F,F,E,E,D,D,C};
//宣告一個常數int陣列用來存每個音的拍子
const int L[]={1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2};
int i;
int j=sizeof(P)/2;//sizeof()函數會回傳有多少個byte,而在Arduino中,一個int是2Byte,因此除以2就能得知整首歌有多少個音符
void setup() {
  pinMode(Speak,OUTPUT);
}

void loop() {
  for(i=0;i<j;i++){
    tone(Speak,P[i],DELAY*L[i]-20);
    delay(DELAY*L[i]);//在執行tone()的時候程式還會繼續執行,因此要放一個delay來暫停
  }
}

音高頻率表(取自維基百科)


上一篇
第五天 Arduino的基本語法介紹(III)
下一篇
第七天 溫溼度感測器基本介紹
系列文
30天自我學習arduino30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言